package thread

//Thread 包含线程的基本方法
type Thread struct {
	isRunning bool //是否在运行
	//BeforStart 启动前执行的操作
	BeforStart func() error
	//AfterStart 启动后执行的操作
	AfterStart func() error
	//BeforStop 停止前执行的操作
	BeforStop func() error
	//AfterStop 停止后执行的操作
	AfterStop func() error
}

//IsRunning 是否运行
func (t *Thread) IsRunning() bool {
	return t.isRunning
}

//SetRunStatus 设置状态
func (t *Thread) SetRunStatus(status bool) {
	t.isRunning = status
}

//Start 启动
func (t *Thread) Start() (err error) {
	if t.BeforStart != nil {
		//运行前的检查处理
		err = t.BeforStart()
		if err != nil {
			return
		}
	}
	t.isRunning = true
	if t.AfterStart != nil {
		//启动后需要执行的操作
		err = t.AfterStart()
		if err != nil {
			t.isRunning = false
			return
		}
	}
	return
}

//Stop 停止
func (t *Thread) Stop() (err error) {
	if t.BeforStop != nil {
		//停止前的检查处理
		err = t.BeforStop()
		if err != nil {
			return
		}
	}
	t.isRunning = false
	if t.AfterStop != nil {
		//停止后的收尾工作
		err = t.AfterStop()
		if err != nil {
			return
		}
	}
	return
}
